/*
题目背景
直达通天路·小 A 历险记第三篇
题目描述
在猴王的帮助下，小 A 终于走出了这篇荒山，却发现一条波涛汹涌的河拦在了自己的面前。河面上并没有船，但好在小 A 有 n 个潜水工具。
由于他还要背重重的背包，所以他只能背 m 重的工具，又因为他的力气并不是无限的，河却很宽，所以他只能背有 v 阻力的工具。
但是这条河下有非常重要的数据，所以他希望能够停留的时间最久。于是他找到了你，让你告诉他方案。
输入格式
三个数 m,v,n 如题目所说。
接下来 n 行，每行三个数 ai,bi,ci
分别表示所含的重力，阻力，能够支撑的时间。
输出格式
第一行一个数，表示最长的时间。
接下来一行，若干个数，表示所选的物品。
*/

#include<bits/stdc++.h>
#define endl "\n"
#define ll long long
#define all(rq) rq.begin(),rq.end()
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)

using namespace std;
const int INF=0x3f3f3f3f;
class th{
public:
    int a,b,c,t;

    th(int a,int b,int c,int t):a(a),b(b),c(c),t(t){
    }

    th(){
    }
};
int main(){
    int m,v,n;
    cin>>m>>v>>n;
    vector<th> s(n+1);
    for(int i=1;i<=n;i++){
        int a,b,c;
        cin>>a>>b>>c;

        s[i]=th(a,b,c,i);
    }

    vector<vector<int>> f(m+1,vector<int>(v+1));
    vector<vector<string>> ans(m+1,vector<string>(v+1));
    for(int i=1;i<=n;i++){ //!!!01背包问题必须注意的问题 如果希望正序处理必须复制一遍上一层状态
        auto temp=f;
        auto temp2=ans;

        for(int j=s[i].a;j<=m;j++){
            for(int k=s[i].b;k<=v;k++){
                if(temp[j-s[i].a][k-s[i].b]+s[i].c>f[j][k]||(temp[j-s[i].a][k-s[i].b]+s[i].c==f[j][k] && temp2[j-s[i].a][k-s[i].b]+char(i) < temp2[j][k])){
                    f[j][k]=temp[j-s[i].a][k-s[i].b]+s[i].c;

                    ans[j][k]=temp2[j-s[i].a][k-s[i].b]+char(i);
                }
            }
        }
    }

    cout<<f[m][v]<<endl;
    for(int i=0;i<ans[m][v].size();i++){
        if(i!=0){
            cout<<' ';
        }
        cout<<int(ans[m][v][i]);
    }
    return 0;
}